// 需求：求和函数 ， 参数不限数量
// 解决方案： arguments 伪数组

/**
 * arguments
 * 1.非常特殊，只存在与 function 函数中
 * 2.这个伪数组中装着所有的实参
 * console.log(arguments)
 */

// 求和
function sum(){
 let sum = 0
//  不是每一个伪数组都有 forEach
 for(let i = 0; i< arguments.length;i++){
     sum += arguments[i]
 }
 return sum
}
console.log(sum(10,20,30)) // 60
console.log(sum(10,20,30,40)) // 100
console.log(sum(10,20,30,40,50))// 150

// 为什么现在不用 arguments 了？  已经被淘汰了
/**
 * 1.是可变参数的出现 ES6 新特性
 * 2.性能原因
 */

// 严格模式
"use strict"


function fn(a){
    // console.log(a) // 10
    // console.log(arguments[0]) // 10

    // 性能下降的原因：如果内部的数据发生变化，会自动同步到形参
    arguments[0] = 50
    console.log(  arguments[0]) // 50
    console.log(a) // 50

    // 如果开启了严格模式 会导致 arguments 无法使用
    console.log(arguments.callee) // fn
}
fn(10)